# author： Zichen
# date: 2021-02-02
#vision: 2.0
# instruction： 利用QQ邮箱进行信息推送


# 发送邮件部分
from smtplib import SMTP, SMTPException
# 发送字符串的邮件
from email.mime.text import MIMEText
# 发送附件
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
# 控制台
from rich.console import Console


console = Console()


def sent(fromaddr, toaddrs, password, message_subject, message, fileName, filePath):
    '''
    QQ邮箱发送主函数（仅处理文本）
    参数：
    fromaddr 邮件发送方邮箱地址
    password 密码(部分邮箱为授权码)
    toaddrs  邮件接受方邮箱地址，注意需要[]包裹，这意味着你可以写多个邮件地址群发
    message  邮件内容
    message_subject 邮件主题
    fileName  要发送的附件名:*.txt/doc/docx/xlsx/jpg/mp4/mp3/pdf/ppt……
    filePath 要发送的附件绝对路径
    '''

    # Multipart就是分多个部分
    msg = MIMEMultipart()
    # 邮件主题
    msg['Subject'] = '%s' % message_subject
    # 发送方信息
    msg['From'] = fromaddr
    # 接受方信息
    msg['To'] = toaddrs[0]

    # 文字部分
    msg.attach(MIMEText("%s" % message))

    # 附件部分
    if fileName != None:  # 发送附件
        part = MIMEApplication(open('%s' % filePath, 'rb').read())
        part.add_header('Content-Disposition', 'attachment',
                        filename="%s" % fileName)
        msg.attach(part)

    try:
        server = SMTP('smtp.qq.com')  # qq邮箱地址
        server.login(fromaddr, password)
        server.sendmail(fromaddr, toaddrs, msg.as_string())
        console.log("[bold green][QQMail]已发送√")
        server.quit()

    except:
        console.print_exception()
